perm filename EEDIT2.2[EAL,HE] blob
sn#704725 filedate 1983-03-26 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 {$NOMAIN Editor: part of editStmnt }
C00005 00003 procedure eEdit2 (s: statementp l,indent,e0,elen: integer
C00009 ENDMK
C⊗;
{$NOMAIN Editor: part of editStmnt }
%include eedit.hdr;
{ Externally defined routines from elsewhere: }
(* From EAUX1B *)
function checkArg(n: nodep; d: datatypes): nodep; external;
(* From EAUX1C *)
procedure errPrnt; external;
procedure relExpr(n: nodep); external;
function evalOrder(what,last: nodep; pcons: boolean): nodep; external;
(* From EPUT *)
function getExprLength(n: nodep): integer; external;
(* From EEXPED *)
function exprEditor(line,lstart,llength,estart: integer;
var elength: integer; off: integer): ascii; external;
(* From ETOKEN *)
procedure dimCheck(n,d: nodep); external;
(* From EPUTST *)
procedure putstmnt(s: statementp; indent, plevel: integer); external;
(* From EPAR3A *)
procedure unfixParse(st: statementp); external;
procedure enableParse(st: statementp); external;
(* From EPAR3B *)
function plistParse(st: statementp;
e0,indent,l,ocur: integer): ascii; external;
(* From EPAR3E *)
procedure cmonParse(st: statementp; getStart: boolean); external;
(* From EEDITS *)
procedure echarDo (echar: ascii; var again: boolean); external;
function editExpr(n: nodep; l,e0,elen: integer;
echar: ascii; var again: boolean): nodep; external;
(* From PP *)
procedure ppLine; external;
procedure ppOutNow; external;
procedure ppChar(ch: ascii); external;
procedure pp5(ch: c5str; length: integer); external;
procedure pp10(ch: cstring; length: integer); external;
procedure pp10L(ch: cstring; length: integer); external;
procedure pp20(ch: c20str; length: integer); external;
procedure pp20L(ch: c20str; length: integer); external;
procedure eEdit2 (s: statementp; l,indent,e0,elen: integer;
var echar: ascii; var again: boolean; var ocur: integer); external;
procedure eEdit2;
var i: integer;
procedure goEd;
begin
with lines[l]↑ do (* go edit it *)
echar := exprEditor(l-firstDline+1,start,length,e0,elen,0);
end;
begin
with s↑ do
case stype of
printtype,
prompttype,
aborttype,
saytype: begin
if (fieldNum = 1) and (stype = prompttype) then e0 := indent + 7
else if stype = saytype then e0 := indent + 4
else e0 := indent + 6;
echar := plistParse(s,e0,indent,l,ocur);
echardo(echar,again);
ocur := 0;
end;
pausetype: begin
e0 := indent + 6;
ptime := checkArg(editExpr(ptime,l,e0,elen,echar,again),svaltype);
dimCheck(ptime,timedim↑.dim); (* right dimension? *)
exprs := evalOrder(ptime,nil,true);
end;
signaltype,
waittype: begin
if stype = signaltype then e0 := indent + 7
else e0 := indent + 5;
event := checkArg(editExpr(event,l,e0,elen,echar,again),eventtype);
exprs := nil;
with event↑ do (* make sure it's a variable *)
if not (((ntype = leafnode) and (ltype = varitype)) or
((ntype = exprnode) and (op = arefop))) then
begin (* no good *)
pp20L(' Need an event varia',20); pp10('ble here ',8); errPrnt;
relExpr(event);
event := nil;
end
else
if ntype <> leafnode then exprs := evalOrder(arg2,nil,true);
end;
enabletype,
disabletype: begin
if stype = enabletype then e0 := indent + 7
else e0 := indent + 8;
if cmonlab = nil then elen := 0
else elen := cmonlab↑.name↑.length;
goEd;
enableParse(s);
echardo(echar,again);
end;
cmtype: begin
e0 := indent;
with lines[l]↑ do
begin (* go edit it *)
i := length - 1;
while listing[start+i] <> 'd' do i := i - 1;
elen := i - e0;
end;
goEd;
cmonParse(s,true);
echardo(echar,again);
end;
unfixtype: begin
e0 := indent + 6;
elen := getExprLength(frame1) + getExprLength(frame2) + 6;
relExpr(frame1);
relExpr(frame2);
goEd;
unfixParse(s);
echardo(echar,again);
end;
otherwise begin pp20L('Oh no! Bad ovly call',20); pp10(': Edits 2 ',9);
ppOutNow; end;
end;
end;